;;==========================================================================
;; Copyright (c) 2000-2008,  Elastos, Inc.  All Rights Reserved.
;;==========================================================================

#define __32BIT(n)      (1 << (n))
#define PSR_I           __32BIT(7)
#define PSR_F           __32BIT(6)

#define PSR_T           __32BIT(5)

#define PSR_MODE_MASK   0x0000001f
#define PSR_MODE_USR    0x00000010
#define PSR_MODE_FIQ    0x00000011
#define PSR_MODE_IRQ    0x00000012
#define PSR_MODE_SVC    0x00000013
#define PSR_MODE_ABT    0x00000017
#define PSR_MODE_UND    0x0000001b
#define PSR_MODE_SYS    0x0000001f

    AREA |.text|,ALIGN=2,CODE, READONLY

;
;   void Cli()
;
    EXPORT  Cli
    EXPORT  __Cli
Cli
__Cli
    mrs     r0, cpsr
    orr     r0, r0, #(PSR_I | PSR_F)
    msr     cpsr_c, r0

    mov     pc, lr


;
;   void Sti()
;
    EXPORT  Sti
    EXPORT  __Sti
Sti
__Sti
    mrs     r0, cpsr
    and     r0, r0, #~(PSR_I | PSR_F)
    msr     cpsr_c, r0

    mov     pc, lr


;
;   uint32_t SaveFlagsAndCli()
;
    EXPORT  SaveFlagsAndCli
    EXPORT  __SaveFlagsAndCli
SaveFlagsAndCli
__SaveFlagsAndCli
    mrs     r0, cpsr;"
    orr     r1, r0, #(PSR_I | PSR_F)
    msr     cpsr_c, r1

    mov     pc, lr


;
;   uint32_t GetCPSR()
;
    EXPORT  GetCPSR
GetCPSR
    mrs     r0, cpsr

    mov     pc, lr


    END
